package optiondialoges;

import javax.swing.JPanel;
import java.awt.Frame;
import java.awt.BorderLayout;
import javax.swing.JDialog;
import java.awt.GridBagLayout;
import javax.swing.JButton;
import java.awt.GridBagConstraints;
import java.awt.Insets;
import javax.swing.JLabel;
import javax.swing.JTextField;

import panel.GlyphPanel;


import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.Serializable;

public class CropOptionDialog extends JDialog implements ActionListener,
        WindowListener, Serializable {

    private static final long serialVersionUID = 1L;

    private JPanel jContentPane = null;

    private JPanel buttonPanel = null;

    private JButton okButton = null;

    private JButton cancelButton = null;

    private JPanel optionPanel = null;

    private JLabel jLabel = null;

    private JTextField topLeftXTextField = null;

    private JLabel jLabel1 = null;

    private JTextField topLeftYTextField = null;

    private JLabel jLabel2 = null;

    private JTextField widthTextField = null;

    private JLabel jLabel3 = null;

    private JTextField heightTextField = null;

    private String topLeftX;

    private String topLeftY;

    private String width;

    private String height;

    private GlyphPanel panel;

    /**
     * @param owner
     */
    public CropOptionDialog(Frame owner, GlyphPanel panel) {
        super(owner);
        this.panel = panel;
        this.addWindowListener(this);
        initialize();
    }

    /**
     * This method initializes this
     * 
     * @return void
     */
    private void initialize() {
        this.setSize(300, 220);
        this.setContentPane(getJContentPane());
    }

    /**
     * This method initializes jContentPane
     * 
     * @return javax.swing.JPanel
     */
    private JPanel getJContentPane() {
        if (jContentPane == null) {
            jContentPane = new JPanel();
            jContentPane.setLayout(new BorderLayout());
            jContentPane.add(getButtonPanel(), BorderLayout.SOUTH);
            jContentPane.add(getOptionPanel(), BorderLayout.CENTER);
        }
        return jContentPane;
    }

    /**
     * This method initializes buttonPanel
     * 
     * @return javax.swing.JPanel
     */
    private JPanel getButtonPanel() {
        if (buttonPanel == null) {
            GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
            gridBagConstraints1.gridx = 1;
            gridBagConstraints1.insets = new Insets(10, 10, 10, 10);
            gridBagConstraints1.gridy = 0;
            GridBagConstraints gridBagConstraints = new GridBagConstraints();
            gridBagConstraints.insets = new Insets(10, 10, 10, 10);
            buttonPanel = new JPanel();
            buttonPanel.setLayout(new GridBagLayout());
            buttonPanel.add(getOkButton(), gridBagConstraints);
            buttonPanel.add(getCancelButton(), gridBagConstraints1);
        }
        return buttonPanel;
    }

    /**
     * This method initializes okButton
     * 
     * @return javax.swing.JButton
     */
    private JButton getOkButton() {
        if (okButton == null) {
            okButton = new JButton();
            okButton.setText("Ok");
            okButton.addActionListener(this);
        }
        return okButton;
    }

    /**
     * This method initializes cancelButton
     * 
     * @return javax.swing.JButton
     */
    private JButton getCancelButton() {
        if (cancelButton == null) {
            cancelButton = new JButton();
            cancelButton.setText("Cancel");
            cancelButton.addActionListener(this);
        }
        return cancelButton;
    }

    /**
     * This method initializes optionPanel
     * 
     * @return javax.swing.JPanel
     */
    private JPanel getOptionPanel() {
        if (optionPanel == null) {
            GridBagConstraints gridBagConstraints9 = new GridBagConstraints();
            gridBagConstraints9.fill = GridBagConstraints.VERTICAL;
            gridBagConstraints9.gridy = 3;
            gridBagConstraints9.weightx = 1.0;
            gridBagConstraints9.insets = new Insets(10, 0, 0, 0);
            gridBagConstraints9.anchor = GridBagConstraints.WEST;
            gridBagConstraints9.gridx = 1;
            GridBagConstraints gridBagConstraints8 = new GridBagConstraints();
            gridBagConstraints8.gridx = 0;
            gridBagConstraints8.anchor = GridBagConstraints.EAST;
            gridBagConstraints8.insets = new Insets(10, 10, 0, 10);
            gridBagConstraints8.gridy = 3;
            jLabel3 = new JLabel();
            jLabel3.setText("Height");
            GridBagConstraints gridBagConstraints7 = new GridBagConstraints();
            gridBagConstraints7.fill = GridBagConstraints.VERTICAL;
            gridBagConstraints7.gridy = 2;
            gridBagConstraints7.weightx = 1.0;
            gridBagConstraints7.anchor = GridBagConstraints.WEST;
            gridBagConstraints7.insets = new Insets(10, 0, 0, 0);
            gridBagConstraints7.gridx = 1;
            GridBagConstraints gridBagConstraints6 = new GridBagConstraints();
            gridBagConstraints6.gridx = 0;
            gridBagConstraints6.anchor = GridBagConstraints.EAST;
            gridBagConstraints6.insets = new Insets(10, 10, 0, 10);
            gridBagConstraints6.gridy = 2;
            jLabel2 = new JLabel();
            jLabel2.setText("Width");
            GridBagConstraints gridBagConstraints5 = new GridBagConstraints();
            gridBagConstraints5.fill = GridBagConstraints.VERTICAL;
            gridBagConstraints5.gridy = 1;
            gridBagConstraints5.weightx = 1.0;
            gridBagConstraints5.insets = new Insets(10, 0, 0, 0);
            gridBagConstraints5.anchor = GridBagConstraints.WEST;
            gridBagConstraints5.gridx = 1;
            GridBagConstraints gridBagConstraints4 = new GridBagConstraints();
            gridBagConstraints4.gridx = 0;
            gridBagConstraints4.anchor = GridBagConstraints.EAST;
            gridBagConstraints4.insets = new Insets(10, 10, 0, 10);
            gridBagConstraints4.gridy = 1;
            jLabel1 = new JLabel();
            jLabel1.setText("Top Left Y");
            GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
            gridBagConstraints3.fill = GridBagConstraints.VERTICAL;
            gridBagConstraints3.gridy = 0;
            gridBagConstraints3.weightx = 1.0;
            gridBagConstraints3.anchor = GridBagConstraints.WEST;
            gridBagConstraints3.insets = new Insets(10, 0, 0, 0);
            gridBagConstraints3.gridx = 1;
            GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
            gridBagConstraints2.gridx = 0;
            gridBagConstraints2.anchor = GridBagConstraints.EAST;
            gridBagConstraints2.insets = new Insets(10, 10, 0, 10);
            gridBagConstraints2.gridy = 0;
            jLabel = new JLabel();
            jLabel.setText("Top Left X");
            optionPanel = new JPanel();
            optionPanel.setLayout(new GridBagLayout());
            optionPanel.add(jLabel, gridBagConstraints2);
            optionPanel.add(getTopLeftXTextField(), gridBagConstraints3);
            optionPanel.add(jLabel1, gridBagConstraints4);
            optionPanel.add(getTopLeftYTextField(), gridBagConstraints5);
            optionPanel.add(jLabel2, gridBagConstraints6);
            optionPanel.add(getWidthTextField(), gridBagConstraints7);
            optionPanel.add(jLabel3, gridBagConstraints8);
            optionPanel.add(getHeightTextField(), gridBagConstraints9);
        }
        return optionPanel;
    }

    /**
     * This method initializes topLeftXTextField
     * 
     * @return javax.swing.JTextField
     */
    private JTextField getTopLeftXTextField() {
        if (topLeftXTextField == null) {
            topLeftXTextField = new JTextField();
            topLeftXTextField.setPreferredSize(new Dimension(120, 21));
        }
        return topLeftXTextField;
    }

    /**
     * This method initializes topLeftYTextField
     * 
     * @return javax.swing.JTextField
     */
    private JTextField getTopLeftYTextField() {
        if (topLeftYTextField == null) {
            topLeftYTextField = new JTextField();
            topLeftYTextField.setPreferredSize(new Dimension(120, 21));
        }
        return topLeftYTextField;
    }

    /**
     * This method initializes widthTextField
     * 
     * @return javax.swing.JTextField
     */
    private JTextField getWidthTextField() {
        if (widthTextField == null) {
            widthTextField = new JTextField();
            widthTextField.setPreferredSize(new Dimension(120, 21));
        }
        return widthTextField;
    }

    /**
     * This method initializes heightTextField
     * 
     * @return javax.swing.JTextField
     */
    private JTextField getHeightTextField() {
        if (heightTextField == null) {
            heightTextField = new JTextField();
            heightTextField.setPreferredSize(new Dimension(120, 21));
        }
        return heightTextField;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        JButton button = (JButton) e.getSource();
        if (button.getText().contentEquals("Ok")) {
            topLeftX = topLeftXTextField.getText();
            topLeftY = topLeftYTextField.getText();
            width = widthTextField.getText();
            height = heightTextField.getText();
            String command = String.format(
                    "makeRectangle(%s, %s, %s, %s);%nrun(\"Crop\");%n",
                    topLeftX, topLeftY, width, height);
            panel.setCommand(command);
            panel.setDialog(this);
            panel.setOptionsSet(true);
        } else if (button.getText().contentEquals("Cancel")) {
            topLeftXTextField.setText(topLeftX);
            topLeftYTextField.setText(topLeftY);
            widthTextField.setText(width);
            heightTextField.setText(height);
        }
        this.setVisible(false);

    }

    @Override
    public void windowActivated(WindowEvent e) {
      //ignore

    }

    @Override
    public void windowClosed(WindowEvent e) {
      //ignore

    }

    @Override
    public void windowClosing(WindowEvent e) {
      //ignore

    }

    @Override
    public void windowDeactivated(WindowEvent e) {
        topLeftXTextField.setText(topLeftX);
        topLeftYTextField.setText(topLeftY);
        widthTextField.setText(width);
        heightTextField.setText(height);

    }

    @Override
    public void windowDeiconified(WindowEvent e) {
      //ignore

    }

    @Override
    public void windowIconified(WindowEvent e) {
        //ignore

    }

    @Override
    public void windowOpened(WindowEvent e) {
        topLeftX = topLeftXTextField.getText();
        topLeftY = topLeftYTextField.getText();
        width = widthTextField.getText();
        height = heightTextField.getText();

    }

}
